
angular.module('smartOlwApp').controller('matriculaCtrl', function($scope,ngDialog,smartOlwServices){
      
	//Si lo quiere manejar asi... entonces no seria necesario el #messageBox...
	$scope.titulo_mensajes 			= "Información!";
	$scope.descripcion_mensajes  	= "En esta vista puede crear matriculas";
    
	var divMessages  				= document.querySelector('#messageBox');
	divMessages.className 			= "alert alert-info alert-dismissable";
	
	$scope.lista 					= {matricula: []};
	$scope.matricula 				= {scpais : null};
	$scope.matricula 				= [];
	$scope.instituciones			= [];
	$scope.grados					= [];
	$scope.tipo_documentos		 	= [];
	$scope.estados					= [];
	
	
	$scope.seleccionarInstitucion	= function() {
		
	};
	
	$scope.grabar 					= function(matricula) {
		smartOlwServices.validateInfo(
			matricula,
			function(objeto) {
				return true;
			},
			function(valido) {
				try {
					var exito 					= function(respuesta) {
						var objeto				= respuesta.data;
						var tipo				= (objeto.codigo == "200")?"success":"danger";
						divMessages.className 	= "alert alert-"+tipo+" alert-dismissable";
						$scope.descripcion_mensajes  = objeto.mensaje;
						if(tipo == "success") {
							$scope.limpiar(matricula);
							$scope.consultar(objeto.mensaje);
						}
					};

					var error 					= function(respuesta){
						console.log(angular.toJson(respuesta));
					};
					
					smartOlwServices.sendPut(
						angular.toJson(valido),
						hostSmart+context+endPointMatricula+methodGetMatricula,exito,error
					);
				}
				catch(e) {
					$scope.titulo_mensajes 		= "Error!";
					$scope.descripcion_mensajes = "Se produjo un error al momento de realizar la matricula";
					divMessages.className 		= "alert alert-danger alert-dismissable";
				}
			},
			function(invalido) {
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se requiere diligenciar los campos obligatorios, por favor validar";
				divMessages.className 		= "alert alert-danger alert-dismissable";
			}
		);
	};
	
	$scope.buscarEstudiante		= function() {
		$scope.buscarPersona(
			$scope.matricula.estudiante.tipoIdentificacion,
			$scope.matricula.estudiante.dsidentificacion,
			function(persona) {
				$scope.matricula.estudiante = persona;
				$scope.matricula.estudiante.tipoIdentificacion = persona.tipoIdentificacion.scdatmestro;
			},
			function() {
				var id		  = $scope.matricula.estudiante.dsidentificacion;
				var mensaje	  = "¿La persona con identificación "+id+" no existe, desea crearla?";
				var confirmar = window.confirm(mensaje);
				if (confirmar == true) {
					$scope.crearPersona(
						'estudiante',
						$scope.matricula.estudiante.tipoIdentificacion,
						$scope.matricula.estudiante.dsidentificacion); 
				}
			},
			'Est'
		);
	};
	
	$scope.buscarPadre			= function() {
		$scope.buscarPersona(
			$scope.matricula.padre.tipoIdentificacion,
			$scope.matricula.padre.dsidentificacion,
			function(persona) {
				$scope.matricula.padre = persona;
				$scope.matricula.padre.tipoIdentificacion = persona.tipoIdentificacion.scdatmestro;
			},
			function() {
				var id		  = $scope.matricula.padre.dsidentificacion;
				var mensaje	  = "¿La persona con identificación "+id+" no existe, desea crearla?";
				var confirmar = window.confirm(mensaje);
				if (confirmar == true) {
					$scope.crearPersona(
						'padre',
						$scope.matricula.padre.tipoIdentificacion,
						$scope.matricula.padre.dsidentificacion); 
				}
			},
			'Pad'
		);
	};
	
	$scope.buscarMadre			= function() {
		$scope.buscarPersona(
			$scope.matricula.madre.tipoIdentificacion,
			$scope.matricula.madre.dsidentificacion,
			function(persona) {
				$scope.matricula.madre = persona;
				$scope.matricula.madre.tipoIdentificacion = persona.tipoIdentificacion.scdatmestro;
			},
			function() {
				var id		  = $scope.matricula.madre.dsidentificacion;
				var mensaje	  = "¿La persona con identificación "+id+" no existe, desea crearla?";
				var confirmar = window.confirm(mensaje);
				if (confirmar == true) {
					$scope.crearPersona(
						'madre',
						$scope.matricula.madre.tipoIdentificacion,
						$scope.matricula.madre.dsidentificacion); 
				}
			},
			'Mad'
		);
	};
	
	$scope.buscarAcudiente		= function() {
		$scope.buscarPersona(
			$scope.matricula.acudiente.tipoIdentificacion,
			$scope.matricula.acudiente.dsidentificacion,
			function(persona) {
				$scope.matricula.acudiente = persona;
				$scope.matricula.acudiente.tipoIdentificacion = persona.tipoIdentificacion.scdatmestro;
			},
			function() {
				var id		  = $scope.matricula.acudiente.dsidentificacion;
				var mensaje	  = "¿La persona con identificación "+id+" no existe, desea crearla?";
				var confirmar = window.confirm(mensaje);
				if (confirmar == true) {
					$scope.crearPersona(
						'acudiente',
						$scope.matricula.acudiente.tipoIdentificacion,
						$scope.matricula.acudiente.dsidentificacion); 
				}
			},
			'Acu'
		);
	};
	
	$scope.crearPersona			= function() {
		var clasePe				= arguments[0];
		var tipoDoc				= arguments[1];
		var numeDoc				= arguments[2];
		var persona				= {
			dsidentificacion   : numeDoc,
			tipoIdentificacion : tipoDoc
		};
		$scope.cargaDialogo		= true;
		$scope.persona 			= persona;
		
		var dialog 	 			 			= ngDialog.open({
			template		: '/AplicacionEduWeb/vistas/smart_personas/smart_persona.html',
			scope			: $scope,
		    className		: 'ngdialog-theme-default custom-width',
		    controller		: "personaCtrl",
            closeByDocument	: false
		});
		dialog.closePromise.then(function(data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.buscarPersona		= function() {
		var persona				= {};
		var tipoDoc				= arguments[0];
		var numeDoc				= arguments[1];
		var postSiExiste		= arguments[2];
		var postNoExiste		= (arguments.length > 3)?arguments[3]:null;
		var entidad				= (arguments.length > 4)?arguments[4]:null;
		
		var exito 				= function(respuesta) {
			var personas		= angular.fromJson(respuesta.data);
			$.each( personas, function( index, persona ) {
		    	persona.fhnacimiento	= new Date(persona.fhnacimiento);
		    	persona.dspnombre		= (persona.dspnombre != null)?persona.dspnombre:"";
		    	persona.dssnombre		= (persona.dssnombre != null)?persona.dssnombre:"";
		    	persona.dspapellido		= (persona.dspapellido != null)?persona.dspapellido:"";
		    	persona.dssapellido		= (persona.dssapellido != null)?persona.dssapellido:"";
		    	persona.dsnombre		= persona.dspnombre  + " " + persona.dssnombre;
		    	persona.dsnombre		= persona.dsnombre.trim() + " " + persona.dspapellido + " " + persona.dssapellido;
		    	personas[index] 		= persona;
			});
			if(personas != null && personas.length > 0) {
			   postSiExiste(personas[0]);
		    } 
		    else {
		    	if(postNoExiste != null) {
		    	   postNoExiste();
		    	}
		    }
		};
		
		var error 						= function(respuesta) {
			$scope.titulo_mensajes 		= "Error!";
			$scope.descripcion_mensajes = "Se produjo un error al momento de consultar personas";
			divMessages.className 		= "alert alert-danger alert-dismissable";
			console.log(angular.toJson(respuesta));
		};
		
		persona							= {
    	    tipoIdentificacion  : tipoDoc,
    		dsidentificacion	: numeDoc
    	};
		
		smartOlwServices.validateInfo(
		    persona,
		    function(informacion) {
		    	var tipoDoc  = (informacion.tipoIdentificacion != null)?informacion.tipoIdentificacion:null;
		    	var numeDoc	 = (informacion.dsidentificacion   != null && informacion.dsidentificacion != "")?informacion.dsidentificacion.trim():null;
		    	return (numeDoc != null && numeDoc.length > 5 && tipoDoc != null);
		    },
		    function(validado) {
			    //Se procede a realizar la consulta de la persona...
			    var numeDoc	 = validado.dsidentificacion;   
		    	var tipoDoc	 = $scope.buscarIndexMaestro(validado.tipoIdentificacion , $scope.tipo_documentos);
		    	tipoDoc		 = $scope.tipo_documentos[tipoDoc];
		    	validado	 = {
	    	    	tipoIdentificacion  : tipoDoc,
	    			dsidentificacion	: numeDoc
	    		};
				smartOlwServices.sendPost(
					angular.toJson(validado),
					hostSmart+context+endPointPersona+methodGetPersona,exito,error
				);
		    },
		    function(erroneos) {
		    	if(erroneos.tipoIdentificacion == null) {
		    	   alert("Debe elegir un tipo de identificación");
		    	   smartOlwServices.focus("tipoIdentificacion"+entidad);
		    	}
		    	if(erroneos.dsidentificacion == null || erroneos.dsidentificacion == "") {
		    	   alert("Debe ingresar el número de documento");
		    	   smartOlwServices.focus("dsidentificacion"+entidad);
		    	}
		    }
		);

	};
	
	$scope.buscarIndexMaestro	= function(codigo,lista) {
		return $scope.buscarItem(
				codigo, 
				$scope.lista,
				function(valor, item) {
					return (valor == item.scdatmestro);
				});
	}
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 	= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarInstituciones			= function(str, metodoProcesa) {
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			    $scope.instituciones 			= [];
				$.each(lista, function(index, institucion) {
					$scope.instituciones.push(institucion);
			    });
				metodoProcesa($scope.instituciones);
			};
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar instituciones";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			var strinput						= (str != null && str != "")?"%"+str+"%":null;
			var institucion						= {dsinstitucion : strinput};
			smartOlwServices.sendPost(
				angular.toJson(institucion),
				hostSmart+context+endPointInstitucion+methodGetInstitucion,
				exito,
				error
			);
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar instituciones";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.cargarSedes							= function(elemento) {
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			    $scope.sedes 					= [];
			    $scope.sedes.push({smDssede : 'Seleccionar' , smScsede : null});
				$.each(lista, function(index, sede) {
					$scope.sedes.push(sede);
			    });
			};
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar sedes";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			var institucion						= elemento.originalObject;
			var sede							= {smartInstitucion : institucion};
			smartOlwServices.sendPost(
				angular.toJson(sede),
				hostSmart+context+endPointSede+methodGetSede,
				exito,
				error
			);
		}
		catch(e){
			$scope.titulo_mensajes 				= "Error!";
			$scope.descripcion_mensajes  		= "Se produjo un error al momento de consultar instituciones";
			divMessages.className 				= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	
	$scope.cargarGrados							= function() {
		$scope.grados							= [];
	};	
	
	$scope.cargarListaMaestros	 = function() {
		var argumentos 			 = arguments;
		var metodo				 = argumentos[1];
		try{
			var exito 			= function(respuesta) {
				try{
					var mensaje	= (argumentos.length > 3)?argumentos[2]:"Se realizó la consulta con exito";
					var objeto	= respuesta.data;
					var lista	= angular.fromJson(objeto);
					var tipo	= (lista.length > 0)?"success":"success";
					metodo(lista);
				}catch(e){
					alert(e.message);
				}
			};

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
		    
			var tipo		= argumentos[0];
			var maestro		= {
				maestrodto  : { scmaestro : tipo }
			};
			smartOlwServices.sendPost(
				angular.toJson(maestro),
				hostSmart+context+endPointMaestro+methodFiltrardatosmaestroxmaestro,exito,error
			);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	$scope.cargarListaMaestros(4, function(lista) {
		$scope.tipo_documentos	 	= lista;
	});
	
	$scope.cargarListaMaestros(4, function(lista) {
		$scope.estados	 			= lista;
	});
	
	/*
	$scope.showModal = function() {
		var dialog 	 = ngDialog.open({
			template: '<div>'+
				      '   <p>En esta vista, puede crear nuevos departamentos, teniendo en cuenta los siguientes aspectos:</p>' +
					  '   <p>' + 
					  '     <ul style="list-style-type:circle;margin-left:10px;">'  +
					  '        <li>Los campos con signo *, son obligatorios, se deben diligenciar.</li>' +
					  '     </ul>' +
					  '   </p>' + 
					  '</div>'+
				      '<div class="ngdialog-buttons">'+
				      '<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Cerrar</button>' +
				      '</div>',
		    className: 'ngdialog-theme-default',
			plain: true
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.filterValue = function($event){
        if(isNaN(String.fromCharCode($event.keyCode))){
            $event.preventDefault();
        }
	};
	
	$scope.listarmatricula = function() {
		var backuppais				= $scope.matricula.scmatricula;
		$scope.consultar({scmatricula : backupmatricula});
	}
	
	$scope.consultar 						= function(matricula){
		var argumentos 						= arguments;
		try{
			var exito 						= function(respuesta){
				try{
					var mensaje				= (argumentos.length > 1)?argumentos[1]:"Se realizó la consulta con exito";
					var objeto				= respuesta.data;
					$scope.matricula 		= angular.fromJson(objeto);
					$scope.titulo_mensajes 	= "Sucesos!";
					$scope.descripcion_mensajes  = ($scope.matricula.length > 0)?mensaje:"No hubo resultados";
					var tipo				= ($scope.departamentos.length > 0)?"success":"success";
					divMessages.className 	= "alert alert-"+tipo+" alert-dismissable";
				}catch(e){
					alert(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				alert(angular.toJson(respuesta));
			}
			
			var backuppais					= departamento.scpais;
			var inpais 						= $scope.buscarPais(departamento.scpais);
			if(departamento.scpais != null) {
				departamento.scpais 		= $scope.paises[inpais];
			}
		    
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,exito,error
			);
			departamento.scpais 			= backuppais;
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de departamentos";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.buscarPais = function(codigo) {
		var posicion = -1;
		for(var index= 0; index < $scope.paises.length; index++) {
			if(codigo == $scope.paises[index].copais) {
				posicion = index;
				break;
			}
		}
		return posicion;
	}

	$scope.grabar = function(matricula){
		var exito = function(respuesta){
			var objeto						= respuesta.data;
			$scope.descripcion_mensajes  	= objeto.mensaje;
			var tipo						= (objeto.codigo == "200")?"success":"danger";
			divMessages.className 			= "alert alert-"+tipo+" alert-dismissable";
			var backuppais					= departamento.scpais;
			if(tipo == "success") {
				$scope.limpiar(matricula);
				$scope.consultar(objeto.mensaje);
			}
		}

		var error = function(respuesta){
			alert(angular.toJson(respuesta));
		}
		
	    if(matricula.scpais == null) {
	    	$('#scpais').addClass("error");
	    }//End of condition...
	    else if(departamento.codepartamento == null) {
	    	$('#codepartamento').addClass("error");
	    }//End of condition...
	    else if(departamento.dsdepartamento == null) {
	    	$('#dsdepartamento').addClass("error");
	    }//End of condition...
	    else {
	    	var dsm_fhingreso				= new Date();
			var ism_fhingresom				= (dsm_fhingreso.getMonth()+1);
				ism_fhingresom 				= (ism_fhingresom <= 9)?"0"+ism_fhingresom:ism_fhingresom;
			var ism_fhingresod				= dsm_fhingreso.getDate();
				ism_fhingresod 				= (ism_fhingresod <= 9)?"0"+ism_fhingresod:ism_fhingresod;
			var ssm_fhingreso				= dsm_fhingreso.getFullYear()+"-"+ism_fhingresom+"-"+ism_fhingresod;

			var backuppais					= departamento.scpais;
			var inpais 						= $scope.buscarPais(departamento.scpais);
			departamento.cousuario 			= 1;
		    departamento.scpais 			= $scope.paises[inpais];
		    departamento.fhingreso			= ssm_fhingreso;
		    departamento.fhmodificacion 	= ssm_fhingreso;
		    
		    smartOlwServices.sendPut(
	    		angular.toJson(departamento),
	    		hostSmart+context+endPointDepartamento+methodSetDepartamento,exito,error
	    	);
			departamento.scpais 		= backuppais;
	    }
		
	}

	$scope.eliminar = function(departamento){
		try{
			var exito = function(respuesta){
				var objeto			= respuesta.data;
				$scope.descripcion_mensajes  = objeto.mensaje;
				var tipo			= (objeto.codigo == "200")?"success":"danger";
				divMessages.className = "alert alert-"+tipo+" alert-dismissable";
				
				var backuppais				= departamento.scpais;
				
				if(tipo == "success") {
					$scope.limpiar(departamento);
					$scope.consultar({scpais : backuppais}, objeto.mensaje);
				}
				//alert(angular.toJson(respuesta.data));
			}

			var error = function(respuesta){
				alert(angular.toJson(respuesta));
			}
			
			var backuppais				= departamento.scpais;
			var inpais 					= $scope.buscarPais(departamento.scpais);
			//departamento.cousuario 		= 1;
		    departamento.scpais 		= $scope.paises[inpais];
		    smartOlwServices.sendPut(angular.toJson(departamento),hostSmart+context+endPointDepartamento+methodRemoveDepartamento,exito,error);
			departamento.scpais 		= backuppais;
		}catch(e){
			alert(e.message);
		}
	}
	
	$scope.seleccionar = function(editdepartamento){
		$scope.departamento 		= angular.copy(editdepartamento);
		$scope.departamento.scpais 	= $scope.departamento.scpais.copais;
	}
	
	$scope.limpiar = function(departamento){
		$scope.departamentos 		= [];
		departamento.scdepartamento = null;
		departamento.scpais 		= null;
		departamento.cousuario 		= 0;
		departamento.dsdepartamento	= "";
		departamento.codepartamento	= "";
		departamento.fhretiro		= "";
		departamento.fhmodificacion = "";
		departamento.fhingreso		= "";
	}
	*/

});